﻿using System.Drawing;
using FastColoredTextBoxNS;
using System.Text.RegularExpressions;


namespace MPE
{
    internal static class ErrorChecker
    {
        static FastColoredTextBox field;
        public static void Init(ref FastColoredTextBox field) => ErrorChecker.field = field;
        public static void needCheckErrors()
        {
            field.Hints.Clear();
            Range allRanges = field.Range;
            for (int i = 0; i < allRanges.ToLine; i++)
            {
                Range rng = field.GetLine(i);//Проверяемая строка
                string clearedText = rng.Text.Trim();

                if (badWord.Match(clearedText).Success)
                    markLine(ref rng, "Неизвестные символы перед ключевым словом!", ref errors);
                else
                if (clearedText == "[IF]" || clearedText == "[IF][]" || clearedText == "[IF][][]" || clearedText == "[IF][][][]")
                    markLine(ref rng, "Условие [IF] не имеет параметров!", ref errors);
                else
                if (moreFunctionParams.Match(clearedText).Success)
                    markLine(ref rng, "У функции слишком много параметров!", ref errors);
                else
                if (emptyFunction.Match(clearedText).Success)
                    markLine(ref rng, "Функция без параметров!", ref errors);
            }
        }
        static Regex badWord = new Regex(@"^\w*\s\[\w*\]");
        static Regex emptyFunction = new Regex(@"^\[\w*\](\[\]){1,3}");
        static Regex moreFunctionParams = new Regex(@"^\[\w*\](\[\]){4,}");

        static Color errors = Color.Red;//Цвет ошибок
        static Color attentions = Color.Red;//Цвет предупреждений

        static void markLine(ref Range rng, string errorMsg, ref System.Drawing.Color color) => field.Hints.Add(new Hint(rng, errorMsg, true, true) { Height = 30, BackColor = color });
    }
}